hhkb
Python

파이썬기초_02_제너레이터와 이터레이터

작성자 : Heehyeon Yoo|2025-12-15
# Python# Generator# Iterator# yield

1. 이터러블(Iterable)과 이터레이터(Iterator)

  • 이터러블 (Iterable): 반복 가능한 객체. (예: list, str, tuple)
    • for 문에 넣을 수 있는 것들.
  • 이터레이터 (Iterator): next() 함수를 호출할 때마다 다음 값을 하나씩 내뱉는 객체.
    • 메모리에 모든 값을 올려두지 않고, 필요할 때마다 하나씩 생성(Lazy Evaluation)함.

2. 제너레이터 (Generator)

이터레이터를 생성하는 가장 쉬운 방법. 함수 안에 return 대신 **yield**를 사용하면 제너레이터가 된다.

일반 함수 vs 제너레이터

  • 일반 함수: 호출되면 return을 만날 때까지 쭉 실행되고 종료됨.
  • 제너레이터: yield를 만나면 값을 던져주고(양보하고) 잠시 멈춤. 다시 호출(next())되면 멈춘 곳에서부터 이어서 실행됨.
def my_gen():
    yield 1
    yield 2
    yield 3

g = my_gen()
print(next(g)) # 1
print(next(g)) # 2

3. 왜 쓰는가? (메모리 효율)

100만 개의 숫자 리스트를 만든다고 가정하자.

  • 리스트(List): 100만 개 숫자를 전부 메모리에 미리 만들어 올림. (메모리 폭발)
  • 제너레이터(Generator): "다음 숫자 내놔" 할 때만 숫자 하나를 만들어서 줌. (메모리 거의 안 씀)
# 리스트 컴프리헨션 (메모리 많이 씀)
my_list = [i for i in range(1000000)]

# 제너레이터 표현식 (메모리 아낌) - 소괄호 사용
my_gen = (i for i in range(1000000))